package org.subside.List;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Author : zhangbo
 * @data : 2024/5/16
 * @description :将两个字符数组合并成一个新的字符数组
 */
public class StreamTest5 {
    public static void main(String[] args) {
        //将两个字符数组合并成一个新的字符数组
        List<String> list = Arrays.asList("m,k,l,a", "1,3,5,7");
        List<String> listNew = list.stream().flatMap(s -> {
            // 将每个元素转换成一个stream
            String[] split = s.split(",");
            Stream<String> s2 = Arrays.stream(split);
            return s2;
        }).collect(Collectors.toList());
        System.out.println("处理前的集合：" + list);//size=2
        System.out.println("处理后的集合：" + listNew);//size=8
        //处理前的集合：[m,k,l,a, 1,3,5,7]
        //处理后的集合：[m, k, l, a, 1, 3, 5, 7]

        /**
         * map系列还有mapToInt、mapToLong、mapToDouble三个函数，
         * 它们以一个映射函数为入参，将流中每一个元素处理后生成一个新流
         */

        // 输出字符串集合中每个字符串的长度
        List<String> stringList = Arrays.asList("mu", "CSDN", "hello",
                "world", "quickly");
        //mapToInt 字面上理解，集合转为int类型的相关操作
        stringList.stream().mapToInt(String::length).forEach(System.out::println);
        // 将int集合的每个元素增加1000
        List<Integer> integerList = Arrays.asList(4, 5, 2, 1, 6, 3);
        integerList.stream().mapToInt(x -> x + 1000).forEach(System.out::println);
        //mapToInt三个函数生成的新流，可以进行很多后续操作，比如求最大最小值、求和、求平均值
        List<Double> doubleList = Arrays.asList(1.0, 2.0, 3.0, 4.0, 2.0);
        double average = doubleList.stream().mapToDouble(Number::doubleValue).average().getAsDouble();
        double sum = doubleList.stream().mapToDouble(Number::doubleValue).sum();
        double max = doubleList.stream().mapToDouble(Number::doubleValue).max().getAsDouble();
        System.out.println("平均值：" + average + "，总和：" + sum + "，最大值：" + max);
    }
}
